/******************************************************************************

		dkouwin.cpp \212\117\214\360\201\105\214\360\217\302\203\105\203\102\203\223\203\150\203\105

										1998.05.19	KEN.KURATANI

******************************************************************************/

#include "stdafx.h"
#include "maincmd.h"
#include "gaikou.h"
#include "dkouwin.h"
#include "comsub.h"
#include "msg.h"
#include "Infogdlg.h"
#include "listwin.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

IMPLEMENT_DYNAMIC(GaikouKoushouWindow, CDialog);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouWindow

BEGIN_MESSAGE_MAP(GaikouKoushouWindow, CDialog)
	//{{AFX_MSG_MAP(GaikouKoushouWindow)
	ON_COMMAND(ID_KOUSHOU_OK, OnOk)
	ON_COMMAND(ID_KOUSHOU_JOGEN, OnJogen)
	ON_COMMAND(ID_KOUSHOU_JOUHOU, OnJouhou)
	ON_COMMAND(ID_KOUSHOU_CANCEL, OnCancel)
	ON_WM_DESTROY()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


GaikouKoushouWindow::GaikouKoushouWindow()
{
	m_pParentWnd = NULL;
	m_pkbGunshi = pkbNull;
#if	defined(_NOEMBEDED_CLASSARRAY)	//\203\122\201\133\203\150\203\105\203\110\203\212\203\101\202\314\203\157\203\117\211\361\224\360
	m_TextBtn = &m_TextBtn0;
	m_TextCtrl = &m_TextCtrl0;
#endif
	m_iTextMax = 0;
	m_unCtrlID = UINT_MAX;
}

GaikouKoushouWindow::~GaikouKoushouWindow()
{
}

const	INT	KOUSHOU_WIN_WX	= 296;
const	INT	KOUSHOU_WIN_WY	= 80;
const	INT	KOUSHOU_WIN_SX	= 8;
const	INT	KOUSHOU_WIN_SY	= 144;
const	INT	KOUSHOU_WIN_DX	= KOUSHOU_WIN_SX + KOUSHOU_WIN_WX;
const	INT	KOUSHOU_WIN_DY	= KOUSHOU_WIN_SY + KOUSHOU_WIN_WY;

CtrlLayout		GaikouKoushouWindow::ctrlLayout[KOUSHOU_LAYOUT_MAX];
DialogLayout	GaikouKoushouWindow::Layout = {
	WINID_KOUSHOUWIN, "GaikouKoushouWindow", {KOUSHOU_WIN_SX, KOUSHOU_WIN_SY, KOUSHOU_WIN_DX, KOUSHOU_WIN_DY},
	WS_POPUP|WS_BORDER, MAINTRANSMODE, DEFAULT_BACK, KOUSHOU_LAYOUT_MAX, ctrlLayout
};

void GaikouKoushouWindow::MakeTextState(CtrlLayout* pCtrlLayout,
							UINT unCtrlId,
							IMAGEID imageId,
							PSTR pSentence, int x, int y)
{
	pCtrlLayout->m_dwStyle = STATIC_TEXT;
	pCtrlLayout->m_unCtrlID = unCtrlId;
	pCtrlLayout->m_ImageID = imageId;
	pCtrlLayout->m_pntCtrl.x = x;
	pCtrlLayout->m_pntCtrl.y = y;
	pCtrlLayout->m_pSentence = pSentence;
}

void GaikouKoushouWindow::MakeButtonState(CtrlLayout* pCtrlLayout,
							  UINT unCtrlId,
							  IMAGEID imageId,
							  PSTR pSentence,
							  int x, int y)
{
	pCtrlLayout->m_dwStyle = CTRL_TEXTBTN;
	pCtrlLayout->m_unCtrlID = unCtrlId;
	pCtrlLayout->m_ImageID = imageId;
	pCtrlLayout->m_pSentence = pSentence;

	pCtrlLayout->m_pntCtrl.x = x;
	pCtrlLayout->m_pntCtrl.y = y;
}


char*	GaikouKoushouWindow::m_strBtn[KOUSHOU_BTN_MAX] = {
	"\217\263\221\370", "\213\221\224\333", "\217\225\214\276", "\217\356\225\361"
};

char*	GaikouKoushouWindow::m_strGaikouType[GAIKOU_MAX] = {
	_T("\223\257\226\277"),
	_T("\213\244\223\257"),
	_T("\220\151\225\250"),
	_T("\212\251\215\220"),
	_T("\225\337\227\270"),
	_T("\224\152\212\374"),
};

POINT	GaikouKoushouWindow::m_poBtn[KOUSHOU_BTN_MAX] = {
	{252, 8},
	{252, 24},
	{252, 40},
	{252, 56},
};

/* \203\214\203\103\203\101\203\105\203\147 */
VOID	GaikouKoushouWindow::InitialCtrlLayout(VOID)
{
}

BOOL GaikouKoushouWindow::Create(VOID)
{
	// \203\164\203\214\201\133\203\200\203\157\203\142\203\164\203\100\223\157\230\136
	static FBLAYOUT_LIST TextLayout = {
		GNO_TMP_TEXTGROUP,
		{ GNO_TMP_TEXT_SX, GNO_TMP_TEXT_SY, GNO_TMP_TEXT_SX + ( ( 64 / 4 ) * GNO_TMP_TEXT_XDIM ), GNO_TMP_TEXT_SY + ( GNO_TMP_TEXT_YDIM * 16 ) },
		TIMFLAG_CLUT | TIMFLAG_4BITS, CLUT_X__STRING, CLUT_Y__STRING, GNO_TMP_TEXT_XDIM, GNO_TMP_TEXT_YDIM, NULL
	};
	static FBLAYOUT_LIST TextLayout2 = {
		GNO_JOUKEN_TEXTGROUP,
		{ GNO_JOUKEN_TEXT_SX, GNO_JOUKEN_TEXT_SY, GNO_JOUKEN_TEXT_SX + ( ( 96 / 4 ) * GNO_JOUKEN_TEXT_XDIM ), GNO_JOUKEN_TEXT_SY + ( GNO_JOUKEN_TEXT_YDIM * 16 ) },
		TIMFLAG_CLUT | TIMFLAG_4BITS, CLUT_X__STRING, CLUT_Y__STRING, GNO_JOUKEN_TEXT_XDIM, GNO_JOUKEN_TEXT_YDIM, NULL
	};

	CSan6FrameBuffer::GetSan6FB()->AppendLayoutList(&TextLayout);
	CSan6FrameBuffer::GetSan6FB()->AppendLayoutList(&TextLayout2);
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	InitialCtrlLayout();
	if ( !CDialog::Create(&Layout, m_pParentWnd, pDoc) ) {
		return FALSE;
	}
	return TRUE;
}

CDIB* GaikouKoushouWindow::OnGetDibPtr(UINT unCtrlID)
{
	if ( (ID_KOUSHOU_BTN_START <= unCtrlID) && (unCtrlID < (ID_KOUSHOU_BTN_START + KOUSHOU_BTN_MAX)) ) {
		return &m_TextBtn[unCtrlID - ID_KOUSHOU_BTN_START];	/* \203\173\203\136\203\223 */
	}
	else if ( (ID_KOUSHOU_TEXT_START <= unCtrlID) && (unCtrlID < (ID_KOUSHOU_TEXT_START + m_iTextMax)) ) {
		return &m_TextCtrl[unCtrlID - ID_KOUSHOU_TEXT_START];/* \202\163\202\144\202\167\202\163 */
	}
	ASSERT(0);
	return NULL;
}

void	GaikouKoushouWindow::OnDestroy(GaikouKoushouWindow* pThis)
{
	CDialog::OnDestroy(pThis);
	CSan6FrameBuffer::GetSan6FB()->RemoveLayoutList(GNO_TMP_TEXTGROUP);
	CSan6FrameBuffer::GetSan6FB()->RemoveLayoutList(GNO_JOUKEN_TEXTGROUP);
}

BOOL GaikouKoushouWindow::InitData(CWnd* pParentWnd)
{
	CGameDoc* pDoc = ::GetSan6App().GetDocument();
	ASSERT(pDoc != NULL);
	m_pParentWnd = pParentWnd;
	m_pkk		= GaikouDataCfg.pkk;		/* \216\300\215\163\214\116\216\345 */
	m_pkkTgt	= GaikouDataCfg.pkkTgt;		/* \221\212\216\350\214\116\216\345 */
	m_pkb		= GaikouDataCfg.pkb;		/* \216\147\216\322 */
	m_pkkSemekomi = GaikouDataCfg.pkkSemekomi;/* \215\125\202\337\215\236\202\335\214\116\216\345 */
	m_pktSemekomi = GaikouDataCfg.pktSemekomi;/* \215\125\202\337\215\236\202\335\223\163\216\163 */
	m_pkbHoryo	= GaikouDataCfg.pkbHoryo;	/* \225\337\227\270 */
	m_iJouken	= GaikouDataCfg.iJouken;	/* \217\360\214\217 */
	m_pki		= GaikouDataCfg.pki;		/* \203\101\203\103\203\145\203\200 */
	m_pkr		= GaikouDataCfg.pkr;		/* \212\257\210\312 */
	m_iKin		= GaikouDataCfg.iKin;		/* \213\340 */
	m_iKome		= GaikouDataCfg.iKome;		/* \225\304 */
	m_iType		= GaikouDataCfg.iType;		/* \212\117\214\360\216\355\227\336 */
	if ( NOTACTIVE(m_pkk) ) {
		return FALSE;
	}
	if ( NOTACTIVE(m_pkkTgt) ) {
		return FALSE;
	}
/* \214\122\216\164 */
	if ( m_pkkTgt->isGunshiHokyuu() ) {		/* \214\122\216\164\202\252\217\225\214\276\202\305\202\253\202\310\202\242 */
		m_pkbGunshi = m_pkkTgt->pkbGunshi();
	}
	else {
		m_pkbGunshi = pkbNull;
	}
	return TRUE;
}

VOID	GaikouKoushouWindow::SetPlate(VOID)
{
}

BOOL	GaikouKoushouWindow::OnInitDialog(CVisualObjectList* pVOL)
{
	if ( !CDialog::OnInitDialog(pVOL) ) {
		return FALSE;
	}
	SetPlate();
	INT	i;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
		m_TextBtn[i].SetSize(32, 16);
	}
	if ( ACTIVE(m_pkbGunshi) ) {		/* \214\122\216\164\221\266\215\335 */
		EnableCtrl(ID_KOUSHOU_JOGEN, TRUE);
	}
	else {
		EnableCtrl(ID_KOUSHOU_JOGEN, FALSE);
	}
	if ( UINT_MAX == m_unCtrlID ) {
		SelectCommand(ID_KOUSHOU_OK);
		m_unCtrlID = ID_KOUSHOU_OK;
	}
	ReviseFocus();						/* \203\164\203\110\201\133\203\112\203\130\217\103\220\263 */
	EnableOkButton();				/* \217\263\221\370\203\173\203\136\203\223\202\252\211\237\202\271\202\351\202\251 */
	return FALSE;
}

/* Focus\225\234\213\101 */
VOID	GaikouKoushouWindow::ReviseFocus(VOID)
{
	if ( UINT_MAX != m_unCtrlID ) {
		HoldDraw();
		SelectCommand(m_unCtrlID);
//		ButtonStatePush(m_unCtrlID);
		ReleaseDraw();
	}
}

/* \217\263\221\370\203\173\203\136\203\223 */
VOID	GaikouKoushouWindow::EnableOkButton(VOID)
{
	HoldDraw();
	EnableCtrl(ID_KOUSHOU_OK, TRUE);
	ReleaseDraw();
}

/* \203\160\203\142\203\150\202\252\211\237\202\263\202\352\202\275 */
void GaikouKoushouWindow::PushPad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_LEFT :
	case PADKEY_RIGHT :
		return;
	default :
		break;
	}
	CDialog::PushPad(nPadID);
}

void GaikouKoushouWindow::ReleasePad(int nPadID)
{
	switch ( nPadID ) {
	case PADKEY_X :
		return;
	default :
		break;
	}
	CDialog::ReleasePad(nPadID);
}

/* \222\206\216\176 */
void	GaikouKoushouWindow::OnCancel(GaikouKoushouWindow* pThis)
{
	pThis->EndModalLoop(IDCANCEL);
}

/* \217\360\214\217\225\134\216\246 */
VOID	GaikouKoushouWindow::DspJouken(VOID)
{

	switch ( m_iJouken ) {
	case GAIKOU_JOUKEN_KIN :
		ASSERT(0 < m_iKin);
		sprintf(m_strJouken, "\213\340:%d", m_iKin);
		break;
	case GAIKOU_JOUKEN_KOME :
		ASSERT(0 < m_iKome);
		sprintf(m_strJouken, "\225\272\227\306:%d", m_iKome);
		break;
	case GAIKOU_JOUKEN_ITEM :
		ASSERT(pkiNull != m_pki);
		sprintf(m_strJouken, "%s", m_pki->strName());
		break;
	case GAIKOU_JOUKEN_KANI :
		ASSERT(pkrNull != m_pkr);
		sprintf(m_strJouken, "%s", m_pkr->strName());
		break;
	case GAIKOU_JOUKEN_NONE :
		sprintf(m_strJouken, "\202\310\202\265");
		break;
	default :
		sprintf(m_strJouken, "\202\310\202\265");
		ASSERT(FALSE);
		break;
	}
}

/*****************************************************************************/

BOOL	GaikouKoushouWindow::ChkOkButton(VOID)
{
	return TRUE;
}

/* \214\210\222\350 */
void	GaikouKoushouWindow::OnOk(GaikouKoushouWindow* pThis)
{
	if ( !pThis->ChkOkButton() ) {
		return;
	}
	pThis->EndModalLoop(IDOK);
}

VOID	GaikouKoushouWindow::DspJouhouSub(CListWnd* plist, KPtr pkk)
{
	CSan6Doc* pDoc = ::GetSan6App().GetDocument();
	InfoGunyuuDlg kDlg;
	kDlg.SetList(plist);
	kDlg.m_bBushouList = FALSE;				// \225\220\217\253\203\212\203\130\203\147\202\315\225\134\216\246\202\265\202\310\202\242 1998/07/02 K.Takata
//	kDlg.DoModal(pkk, pDoc->GetMainView());
	kDlg.DoModal(pkk, NULL);
}

/* \214\121\227\131 */
VOID	GaikouKoushouWindow::DspJouhou(VOID)
{
	KList	klist;
	INT	kazu = klist.PickAll(KLS_ALL);
	if ( 0 >= kazu ) {
		return;
	}
	CSan6Doc* pDoc = ::GetSan6App().GetDocument();
//	CWnd*	pParentWnd = pDoc->GetMainView();
	CWnd*	pParentWnd = ::GetSan6App().m_pMainWnd->GetLastActivePopup();

	KListWindow	ListWindow;
	CImageList2 imgList;
	imgList.Create(g_sImageCount, g_pImageListID);
	ListWindow.SetImageList(&imgList, IMAGE_COLUMN);
	ListWindow.Initialize((short)-1);
	ListWindow.SetList(klist);
	for ( ; ; ) {
		INT iResult = ListWindow.DoModal(pParentWnd, pDoc,_T("\214\121\227\131\220\330\221\326"));
		if ( iResult == IDCANCEL ) {
			break;
		}
		KList ResultList;
		VERIFY(ListWindow.GetSelectList(&ResultList));
		KPtr pkk = ResultList.GetHead();
		if ( NOTACTIVE(pkk) ) {
			break;
		}
		DspJouhouSub(&ListWindow, pkk);
	}
}

/* \217\356\225\361 */
void	GaikouKoushouWindow::OnJouhou(GaikouKoushouWindow* pThis)
{
	pThis->m_unCtrlID = ID_KOUSHOU_JOUHOU;
	pThis->DspJouhou();
}

/* \217\225\214\276 */
void	GaikouKoushouWindow::OnJogen(GaikouKoushouWindow* pThis)
{
	pThis->m_unCtrlID = ID_KOUSHOU_JOGEN;
	pThis->Jogen();
}

INT		GaikouKoushouWindow::iGetComKanshakuToubatsuSeikouKaku(KPtr pkk, KPtr pkkTou)
{
	INT	tekitai = pkk->iTekitai(pkkTou);
	INT	jin = pkkTou->iJintoku();
	BPtr	pkb = pkk->pkbBushou();
	INT	yabou = pkb->iYabou();
	INT		kaku;
	kaku = limsub(tekitai + yabou, jin / 4);
	return kaku;
}

/* gunyuu.cpp */
BOOL	GaikouKoushouWindow::isComKanshakuToubatsuSeikou(GaikouDataConfig *pkgdc)
{
	KPtr	pkkTgt = pkgdc->pkkTgt;
	KPtr	pkkTou = pkgdc->pkkSemekomi;
	if ( NOTACTIVE(pkkTou) ) {
		return TRUE;
	}
	ASSERT(ACTIVE(pkkTgt));
	INT	kaku;
	kaku = iGetComKanshakuToubatsuSeikouKaku(pkkTgt, pkkTou);
	return kakuAbs(kaku, pkkTgt->pkbBushou(), pkkTou->pkbBushou());
}

/* \202\340\202\265\202\142\202\156\202\154\202\276\202\301\202\275\202\347\202\156\202\152\202\267\202\351\202\251 */
BOOL	GaikouKoushouWindow::isComGaikouSeikou(VOID)
{
	BOOL	f = FALSE;

	switch ( m_iType ) {
	case GAIKOU_DOUMEI:			/* \223\257\226\277 */
		f = ::isComDoumeiSeikou(&GaikouDataCfg);
		break;
	case GAIKOU_KYOUDOU:		/* \213\244\223\257 */
		f = ::isComKyoudouSeikou(&GaikouDataCfg);
		break;
	case GAIKOU_SHINMOTSU:		/* \220\151\225\250 */
		f = ::isComShinmotsuSeikou(&GaikouDataCfg);
		break;
	case GAIKOU_KANKOKU:		/* \212\251\215\220 */
		f = ::isComKankokuSeikou(&GaikouDataCfg);
		break;
	case GAIKOU_HORYO:			/* \225\337\227\270 */
		f = ::isComHoryoSeikou(&GaikouDataCfg);
		break;
	case GAIKOU_HAKI:			/* \224\152\212\374 */
		ASSERT(FALSE);
		break;
	default:					/* \212\257\216\335\202\314\202\315\202\270 */
		f = isComKanshakuToubatsuSeikou(&GaikouDataCfg);
		break;
	}
	return f;
}

/* \214\122\216\164\202\252\216\136\220\254\202\251 */
BOOL	GaikouKoushouWindow::isGunshiAgree(BOOL kekkaf)
{
	BOOL	f = AdviceGunshi(m_pkbGunshi, m_pkb->iNum(), kekkaf);
	return f;
}

VOID	GaikouKoushouWindow::SetJogenMessage(char* buf, BOOL f)
{
	switch ( m_iType ) {
	case GAIKOU_DOUMEI:			/* \223\257\226\277 */
		if ( f ) {
			sprintf(buf, msgmgrDoMessage(MSG_e_gy_gk_dou, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
		}
		else {
			sprintf(buf, msgmgrDoMessage(MSG_e_gn_gk_dou, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
		}
		break;
	case GAIKOU_KYOUDOU:		/* \213\244\223\257 */
		if ( f ) {
			sprintf(buf, msgmgrDoMessage(MSG_e_gy_gk_kyo, 4, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou(), m_pkkSemekomi->pkbBushou()));
		}
		else {
			sprintf(buf, msgmgrDoMessage(MSG_e_gn_gk_kyo, 4, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou(), m_pkkSemekomi->pkbBushou()));
		}
		break;
	case GAIKOU_SHINMOTSU:		/* \220\151\225\250 */
		if ( f ) {
			sprintf(buf, msgmgrDoMessage(MSG_e_gy_gk_snm, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
		}
		else {
			sprintf(buf, msgmgrDoMessage(MSG_e_gn_gk_snm, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
		}
		break;
	case GAIKOU_KANKOKU:		/* \212\251\215\220 */
		if ( m_pkkTgt->isJuuzoku(m_pkk) ) {		/* \215\176\225\232\212\251\215\220 */
			if ( f ) {
				sprintf(buf, msgmgrDoMessage(MSG_e_gy_gk_kka, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
			}
			else {
				sprintf(buf, msgmgrDoMessage(MSG_e_gn_gk_kka, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
			}
		}
		else {									/* \217\135\221\256\212\251\215\220 */
			if ( f ) {
				sprintf(buf, msgmgrDoMessage(MSG_e_gy_gk_jka, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
			}
			else {
				sprintf(buf, msgmgrDoMessage(MSG_e_gn_gk_jka, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
			}
		}
		break;
	case GAIKOU_HORYO:			/* \225\337\227\270 */
		if ( f ) {
			sprintf(buf, msgmgrDoMessage(MSG_e_gy_gk_hor, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
		}
		else {
			sprintf(buf, msgmgrDoMessage(MSG_e_gn_gk_hor, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkk->pkbBushou()));
		}
		break;
	case GAIKOU_HAKI:			/* \224\152\212\374 */
		sprintf(buf, "\202\334\202\240\202\242\202\242\202\305\202\265\202\345\202\244");
		ASSERT(FALSE);
		break;
	default:					/* \212\257\216\335\202\314\202\315\202\270 */
		if ( f ) {
			sprintf(buf, msgmgrDoMessage(MSG_e_gy_tbrei, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkkSemekomi));
		}
		else {
			sprintf(buf, msgmgrDoMessage(MSG_e_gn_tbrei, 3, m_pkbGunshi, m_pkkTgt->pkbBushou(), m_pkkSemekomi));
		}
		break;
	}
}

VOID	GaikouKoushouWindow::Jogen(VOID)
{
	char	buf[256];
	BOOL	f1, f2;

	if ( ACTIVE(m_pkbGunshi) ) {
		f1 = isComGaikouSeikou();
		f2 = isGunshiAgree(f1);
		SetJogenMessage(buf, f2);
		BushouMsg(m_pkbGunshi, buf);
	}
}

/*****************************************************************************/
/******************************* \223\257\226\277 ****************************************/
/*****************************************************************************/

IMPLEMENT_DYNAMIC(GaikouKoushouDoumeiWindow, GaikouKoushouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouDoumeiWindow

/* \223\257\226\277 */
VOID	GaikouKoushouDoumeiWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_KOUSHOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeButtonState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_KOUSHOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \223\340\227\145  ", 8, 8);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\223\257\226\277\222\367\214\213", 80, 8);
	IMnum++;
	/* \214\121\227\131 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\214\360\217\302\214\121\227\131", 8, 32);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkk->strName(), 80, 32);
	IMnum++;
	/* \223\107\221\316 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "(\223\107\221\316\220\123 ", 144, 32);
	IMnum++;
	sprintf(m_strTekitai, "%3d)", m_pkk->iTekitai(m_pkkTgt));
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strTekitai, 208, 32);
	IMnum++;
	/* \217\360\214\217 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \217\360\214\217  ", 8, 56);
	IMnum++;
	DspJouken();
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(0), m_strJouken, 80, 56);
	IMnum++;

	m_iTextMax = KOUSHOU_DOUMEI_TEXT_MAX;
	Layout.m_unCtrlNumber = KOUSHOU_DOUMEI_LAYOUT_MAX;
	ASSERT(KOUSHOU_DOUMEI_LAYOUT_MAX == num);
	ASSERT(KOUSHOU_DOUMEI_LAYOUT_MAX == IMnum);
}

VOID	GaikouKoushouDoumeiWindow::SetPlate(VOID)
{
	m_TextCtrl[0].SetPlate(TEXT_PLATE64);
	m_TextCtrl[2].SetPlate(TEXT_PLATE64);
	m_TextCtrl[6].SetPlate(TEXT_PLATE64);
}

/*****************************************************************************/
/******************************* \213\244\223\257 ****************************************/
/*****************************************************************************/

IMPLEMENT_DYNAMIC(GaikouKoushouKyoudouWindow, GaikouKoushouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouKyoudouWindow

/* \213\244\223\257 */
VOID	GaikouKoushouKyoudouWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_KOUSHOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeButtonState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_KOUSHOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \223\340\227\145  ", 8, 8);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\213\244\223\257\215\354\220\355", 80, 8);
	IMnum++;
	/* \214\121\227\131 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\214\360\217\302\214\121\227\131", 8, 24);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkk->strName(), 80, 24);
	IMnum++;
	/* \223\107\221\316 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "(\223\107\221\316\220\123 ", 144, 24);
	IMnum++;
	sprintf(m_strTekitai, "%3d)", m_pkk->iTekitai(m_pkkTgt));
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strTekitai, 208, 24);
	IMnum++;
	/* \226\332\225\127 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\226\332\225\127\223\163\216\163", 8, 40);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pktSemekomi->strName(), 80, 40);
	IMnum++;
	sprintf(m_strSemekomiKunshu, "(%s)", m_pkkSemekomi->strName());/* \215\125\202\337\215\236\202\335\214\116\216\345 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(1), m_strSemekomiKunshu, 144, 40);
	IMnum++;
	/* \217\360\214\217 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \217\360\214\217  ", 8, 56);
	IMnum++;
	DspJouken();
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(0), m_strJouken, 80, 56);
	IMnum++;

	m_iTextMax = KOUSHOU_KYOUDOU_TEXT_MAX;
	Layout.m_unCtrlNumber = KOUSHOU_KYOUDOU_LAYOUT_MAX;
	ASSERT(KOUSHOU_KYOUDOU_LAYOUT_MAX == num);
	ASSERT(KOUSHOU_KYOUDOU_LAYOUT_MAX == IMnum);
}

VOID	GaikouKoushouKyoudouWindow::SetPlate(VOID)
{
	m_TextCtrl[0].SetPlate(TEXT_PLATE64);
	m_TextCtrl[2].SetPlate(TEXT_PLATE64);
	m_TextCtrl[6].SetPlate(TEXT_PLATE64);
	m_TextCtrl[9].SetPlate(TEXT_PLATE64);
}

/*****************************************************************************/
/******************************* \220\151\225\250 ****************************************/
/*****************************************************************************/

IMPLEMENT_DYNAMIC(GaikouKoushouShinmotsuWindow, GaikouKoushouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouShinmotsuWindow

/* \220\151\225\250 */
VOID	GaikouKoushouShinmotsuWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_KOUSHOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeButtonState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_KOUSHOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \223\340\227\145  ", 8, 8);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\220\151\225\250\221\241\222\346", 80, 8);
	IMnum++;
	/* \214\121\227\131 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\214\360\217\302\214\121\227\131", 8, 32);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkk->strName(), 80, 32);
	IMnum++;
	/* \223\107\221\316 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "(\223\107\221\316\220\123 ", 144, 32);
	IMnum++;
	sprintf(m_strTekitai, "%3d)", m_pkk->iTekitai(m_pkkTgt));
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strTekitai, 208, 32);
	IMnum++;
	/* \217\360\214\217 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \217\360\214\217  ", 8, 56);
	IMnum++;
	DspJouken();
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(0), m_strJouken, 80, 56);
	IMnum++;

	m_iTextMax = KOUSHOU_SHINMOTSU_TEXT_MAX;
	Layout.m_unCtrlNumber = KOUSHOU_SHINMOTSU_LAYOUT_MAX;
	ASSERT(KOUSHOU_SHINMOTSU_LAYOUT_MAX == num);
	ASSERT(KOUSHOU_SHINMOTSU_LAYOUT_MAX == IMnum);
}

VOID	GaikouKoushouShinmotsuWindow::SetPlate(VOID)
{
	m_TextCtrl[0].SetPlate(TEXT_PLATE64);
	m_TextCtrl[2].SetPlate(TEXT_PLATE64);
	m_TextCtrl[6].SetPlate(TEXT_PLATE64);
}

/*****************************************************************************/
/******************************* \212\251\215\220 ****************************************/
/*****************************************************************************/

IMPLEMENT_DYNAMIC(GaikouKoushouKankokuWindow, GaikouKoushouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouKankokuWindow

/* \212\251\215\220 */
VOID	GaikouKoushouKankokuWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_KOUSHOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeButtonState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_KOUSHOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \223\340\227\145  ", 8, 16);
	IMnum++;
	if ( m_pkkTgt->isJuuzoku(m_pkk) ) {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\215\176\225\232\212\251\215\220", 80, 16);
	}
	else {
		MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\217\135\221\256\212\251\215\220", 80, 16);
	}
	IMnum++;
	/* \214\121\227\131 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\212\251\215\220\214\121\227\131", 8, 48);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkk->strName(), 80, 48);
	IMnum++;
	/* \223\107\221\316 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "(\223\107\221\316\220\123 ", 144, 48);
	IMnum++;
	sprintf(m_strTekitai, "%3d)", m_pkk->iTekitai(m_pkkTgt));
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strTekitai, 208, 48);
	IMnum++;

	m_iTextMax = KOUSHOU_KANKOKU_TEXT_MAX;
	Layout.m_unCtrlNumber = KOUSHOU_KANKOKU_LAYOUT_MAX;
	ASSERT(KOUSHOU_KANKOKU_LAYOUT_MAX == num);
	ASSERT(KOUSHOU_KANKOKU_LAYOUT_MAX == IMnum);
}

VOID	GaikouKoushouKankokuWindow::SetPlate(VOID)
{
	m_TextCtrl[0].SetPlate(TEXT_PLATE64);
	m_TextCtrl[2].SetPlate(TEXT_PLATE64);
}

BOOL	GaikouKoushouKankokuWindow::ChkOkButton(VOID)
{
	return	ChkKankokuShoudaku(m_pkk, m_pkkTgt);
}

/* \217\263\221\370\203\173\203\136\203\223 */
VOID	GaikouKoushouKankokuWindow::EnableOkButton(VOID)
{
	HoldDraw();
	if ( ChkOkButton() ) {
		EnableCtrl(ID_KOUSHOU_OK, TRUE);
	}
	else {
		EnableCtrl(ID_KOUSHOU_OK, FALSE);
	}
	ReleaseDraw();
}

/*****************************************************************************/
/******************************* \225\337\227\270 ****************************************/
/*****************************************************************************/

IMPLEMENT_DYNAMIC(GaikouKoushouHoryoWindow, GaikouKoushouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouHoryoWindow

/* \225\337\227\270 */
VOID	GaikouKoushouHoryoWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_KOUSHOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeButtonState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_KOUSHOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \223\340\227\145  ", 8, 8);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\225\337\227\270\225\324\212\322", 80, 8);
	IMnum++;
	/* \214\121\227\131 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\214\360\217\302\214\121\227\131", 8, 24);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkk->strName(), 80, 24);
	IMnum++;
	/* \223\107\221\316 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "(\223\107\221\316\220\123 ", 144, 24);
	IMnum++;
	sprintf(m_strTekitai, "%3d)", m_pkk->iTekitai(m_pkkTgt));
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strTekitai, 208, 24);
	IMnum++;
	/* \225\337\227\270 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\225\324\212\322\225\337\227\270", 8, 40);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkbHoryo->strName(), 80, 40);
	IMnum++;
	/* \217\360\214\217 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \217\360\214\217  ", 8, 56);
	IMnum++;
	DspJouken();
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(0), m_strJouken, 80, 56);
	IMnum++;

	m_iTextMax = KOUSHOU_HORYO_TEXT_MAX;
	Layout.m_unCtrlNumber = KOUSHOU_HORYO_LAYOUT_MAX;
	ASSERT(KOUSHOU_HORYO_LAYOUT_MAX == num);
	ASSERT(KOUSHOU_HORYO_LAYOUT_MAX == IMnum);
}

VOID	GaikouKoushouHoryoWindow::SetPlate(VOID)
{
	m_TextCtrl[0].SetPlate(TEXT_PLATE64);
	m_TextCtrl[2].SetPlate(TEXT_PLATE64);
	m_TextCtrl[6].SetPlate(TEXT_PLATE64);
	m_TextCtrl[8].SetPlate(TEXT_PLATE64);
}

/*****************************************************************************/
/******************************* \212\257\216\335 ****************************************/
/*****************************************************************************/

IMPLEMENT_DYNAMIC(GaikouKoushouKanshakuWindow, GaikouKoushouWindow);

#undef	CURRENTCLASS
#define	CURRENTCLASS	GaikouKoushouKanshakuWindow

/* \212\257\216\335 */
VOID	GaikouKoushouKanshakuWindow::InitialCtrlLayout(VOID)
{
	INT	i;
/* \203\173\203\136\203\223 */
	INT	num = 0;
	INT	IDnum = ID_KOUSHOU_BTN_START;
	INT	IMnum = 0;
	for ( i = 0 ; i < KOUSHOU_BTN_MAX ; i++ ) {
#if	defined( _PC )
		CPoint	po = m_poBtn[i];
#else	// defined( _PC )
		POINT	po = m_poBtn[i];
#endif	// defined( _PC )
		MakeButtonState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strBtn[i], po.x, po.y);
		IMnum++;
	}
/* \202\163\202\144\202\167\202\163 */
	IDnum = ID_KOUSHOU_TEXT_START;
	/* \203\136\203\103\203\147\203\213 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \223\340\227\145  ", 8, 8);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\223\242\224\260\227\337", 80, 8);
	IMnum++;
	/* \212\257\216\335 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "  \212\257\216\335  ", 8, 32);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_JOUKEN_TEXT(0), (char*)m_pkr->strName(), 80, 32);
	IMnum++;
	/* \223\242\224\260\220\250\227\315 */
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "\223\242\224\260\220\250\227\315", 8, 56);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), (char*)m_pkkSemekomi->strName(), 80, 56);
	IMnum++;
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), "(\223\107\221\316\220\123 ", 144, 56);
	IMnum++;
	sprintf(m_strTekitai, "%3d)", m_pkkSemekomi->iTekitai(m_pkkTgt));
	MakeTextState(&ctrlLayout[num++], IDnum++,
					GNO_TMP_TEXT(IMnum), m_strTekitai, 208, 56);
	IMnum++;

	m_iTextMax = KOUSHOU_KANSHAKU_TEXT_MAX;
	Layout.m_unCtrlNumber = KOUSHOU_KANSHAKU_LAYOUT_MAX;
	ASSERT(KOUSHOU_KANSHAKU_LAYOUT_MAX == num);
	ASSERT(KOUSHOU_KANSHAKU_LAYOUT_MAX == IMnum);
}

VOID	GaikouKoushouKanshakuWindow::SetPlate(VOID)
{
	m_TextCtrl[0].SetPlate(TEXT_PLATE64);
	m_TextCtrl[2].SetPlate(TEXT_PLATE64);
	m_TextCtrl[4].SetPlate(TEXT_PLATE64);
}

/******************************* dkouwin.cpp *********************************/